require "busca"
#Classe Aluno para representacao de um aluno
class Aluno
    #Representa um aluno da escola, identificado por sua matricula e nome
    #crie um atributo de classe que armazene a quantidade de alunos
#    @@qtdAluno = 0
#    attr_reader :identificador, :nome, :matricula
    attr_reader :nome, :matricula
    #Metodo construtor da classe Aluno
    # *nome
    # *matricula
    def initialize(nome,mat)
        #incremente a quantidade de alunos (atributo da classe)
#        @identificador = @@qtdAluno+=1
        @nome=nome
        @matricula=mat
    end
    def to_s
#        "[id = #{@identificador}] Nome: #{@nome} Matricula: #{@matricula}\n"
	 "Nome: #{@nome} Matricula: #{@matricula}\n"
    end
end

class Turma
    #Representa uma turma da escola, identificada por seu numero.
    #Uma turma tem alunos e disciplinas
    #crie um atributo de classe que armazene a quantidade de turmas
#    @@qtdTurma = 0
#    attr_reader :identificador, :numero, :alunos, :disciplinas
    attr_reader :numero, :alunos, :disciplinas
    attr_writer :numero, :alunos, :disciplinas
    def initialize(numero,alunos=[],disciplinas=[])
        #incremente a quantidade de turmas (atributo da classe)
#        @identificador = @@qtdTurma+=1
        @numero=numero
        @alunos= alunos
        @disciplinas= disciplinas
    end
    def to_s
#        s="[id=#{@identificador}] Numero da Turma: #{@numero}\n"
	 s="Numero da Turma: #{@numero}\n"
        s+="   --Alunos-- \n"
        for i in alunos
          s+=i.to_s
        end
        s+="\n  --Disciplinas-- \n"
        for i in disciplinas
          s+=i.to_s
        end
        return s
    end
end

class Disciplina
    #Representa uma disciplina da escola, identificada por seu codigo e nome
    #crie um atributo de classe que armazene a quantidade de disciplinas
#    @@qtdDisciplina = 0
    attr_reader :identificador, :nome, :codigo
    def initialize(cd,nome)
        #incremente a quantidade de turmas (atributo da classe)
#        @identificador = @@qtdDisciplina+=1
        @codigo=cd
        @nome=nome
    end
    def to_s
        #Imprime uma disciplina, com seu codigo e nome
#        "[id=#{@identificador}] Codigo: #{@codigo} Nome: #{@nome}\n"
        "Codigo: #{@codigo} Nome: #{@nome}\n"
    end
end

class Coordenacao
    #Cliente das demais classes
    attr_reader :turmas, :alunos, :disciplinas
    def initialize(turmas=[],alunos=[],disciplinas=[])
        @turmas=turmas
        @alunos=alunos
        @disciplinas=disciplinas
    end
    def criaTurma(n,a=[],d=[])
        #Cria uma nova turma na escola
        @turmas.push Turma.new(n,a,d)
    end
    def matriculaAluno(nome,mat)
        #Cria um novo aluno na escola
        @alunos.push Aluno.new(nome,mat)
    end
    def criaDisciplina(cod,nome)
        #Cria uma nova disciplina na escola
        @disciplinas.push Disciplina.new(cod,nome)
    end
    def inscreveAlunoEmTurma(turma,aluno)
        #Inscreve um aluno em uma turma
        puts aluno.class.name
        puts turma.class.name
        a = Busca.buscar(@alunos,aluno)
        if a != nil
          t = Busca.buscar(@turmas,turma)
          if t != nil
            t.alunos.push a
          else
#            puts "A Turma Id=#{turma} ainda nao foi criada!"
            puts "A Turma Nome=#{turma} ainda nao foi criada!"
          end
        else
#          puts "O Aluno Id=#{aluno} ainda nao foi criado!"
          puts "O Aluno Nome=#{aluno} ainda nao foi criado!"
        end
    end

    def alocaDisciplinaEmTurma(turma,disciplina)
        #Aloca uma disciplina em uma turma
        d = Busca.buscar(@disciplinas,disciplina)
        if d != nil
          t = Busca.buscar(@turmas,turma)
          if t != nil
            t.disciplinas.push d
          else
#            puts "A Turma Id=#{turma} ainda nao foi criada!"
             puts "A Turma Nome=#{turma} ainda nao foi criada!"
          end
        else
#          puts "A Disciplina Id=#{disciplina} ainda nao foi criada!"
           puts "A Disciplina Nome=#{disciplina} ainda nao foi criada!"
        end
    end
    def listaTurmas
        #lista turmas
        for i in @turmas
          puts i.to_s
        end
    end
    def listaAlunos
        #lista alunos
        for i in @alunos
          puts i.to_s
        end
    end
    def listaDisciplinas
       #lista disciplinas
       for i in @disciplinas
         puts i.to_s
       end
    end
end




